package com.errol.generic.log;

import java.util.List;

/**
 * 日志服务，按日志类型分文件输出，特殊日志信息可选择发送邮件提醒
 *
 * @author zhang xiao bin
 * @version v1.0
 * @date 2018/04/20
 **/
public interface LogService {

    /**
     * 记录日志的同时发送提醒
     *
     * @param desc 日志信息
     * @return desc
     */
    String remind(String desc);

    /**
     * 记录日志的同时发送提醒
     * 调用 String.format(format, ...args) 生成日志信息
     *
     * @param format 字符串格式
     * @param args   字符参数
     * @return String.format(format, ...args)
     */
    String remind(String format, Object... args);

    /**
     * 记录日志的同时发送邮件提醒
     *
     * @param desc 日志信息
     * @return joined desc
     */
    String remind(List<String> desc);

    /**
     * 输出调试信息，仅非正式环境输出，输出到控制台或logs/debug.log
     *
     * @param desc 调试信息
     * @return desc
     */
    String debug(String desc);

    /**
     * 输出调试信息，仅非正式环境输出，输出到控制台或logs/debug.log
     * 调用 String.format(format, ...args) 生成日志信息
     *
     * @param format 字符串格式
     * @param args   字符参数
     * @return String.format(format, ...args)
     */
    String debug(String format, Object... args);

    /**
     * 输出调试信息，仅非正式环境输出，输出到控制台或logs/debug.log
     *
     * @param desc 调试信息
     * @return joined desc
     */
    String debug(List<String> desc);

    /**
     * 输出描述信息，输出到控制台或logs/debug.log
     *
     * @param desc 描述信息
     * @return desc
     */
    String info(String desc);

    /**
     * 输出描述信息，输出到控制台或logs/debug.log
     * 调用 String.format(format, ...args) 生成日志信息
     *
     * @param format 字符串格式
     * @param args   字符参数
     * @return String.format(format, ...args)
     */
    String info(String format, Object... args);

    /**
     * 输出描述信息，输出到控制台或logs/debug.log
     *
     * @param desc 描述信息
     * @return joined desc
     */
    String info(List<String> desc);

    /**
     * 输出警告信息，一般用在抛错异常信息之前
     *
     * @param desc 警告信息
     * @return desc
     */
    String warn(String desc);

    /**
     * 输出警告信息，一般用在抛错异常信息之前
     * 调用 String.format(format, ...args) 生成日志信息
     *
     * @param format 字符串格式
     * @param args   字符参数
     * @return String.format(format, ...args)
     */
    String warn(String format, Object... args);

    /**
     * 输出警告级别的异常信息
     *
     * @param e 异常
     * @return e.getMessage()
     */
    String warn(Throwable e);

    /**
     * 输出警告信息和警告级别的异常信息
     *
     * @param e    异常
     * @param desc 和异常相关的警告信息
     * @return desc
     */
    String warn(Throwable e, String desc);

    /**
     * 输出错误级别的异常信息
     *
     * @param e 异常
     * @return e.getMessage()
     */
    String error(Throwable e);

    /**
     * 输出错误级别的异常信息和提示
     *
     * @param e    异常
     * @param desc 和异常相关的提示信息
     * @return desc
     */
    String error(Throwable e, String desc);

}
